home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok46.lha / Module / IntuitionTools.mod < prev    next >
Text File  |  1993-08-15  |  18KB  |  746 lines

  1. (*
  2.  * -------------------------------------------------------------------------
  3.  *
  4.  *    :Program.    IntuitionTools.mod
  5.  *    :Contents.    Proceduren zum Initialisieren von Amiga-Strukturen,
  6.  *    :Contents.    atomare Gadgetaktionen.
  7.  *    :Author.    Reiner Nix
  8.  *    :Address.    Geranienhof 2, 5000 Köln 71 Seeberg
  9.  *    :Copyright.    Public Domain
  10.  *    :Language.    Modula-2
  11.  *    :Translator.    M2Amiga A-L V3.3d
  12.  *    :History.    V1.0a    26.9.'90
  13.  *
  14.  * -------------------------------------------------------------------------
  15.  *)
  16.  
  17. IMPLEMENTATION MODULE IntuitionTools;
  18.  
  19. FROM    SYSTEM        IMPORT    ADR, ADDRESS, BITSET, LONGSET;
  20. FROM    Arts        IMPORT    Assert, TermProcedure;
  21. FROM    Exec        IMPORT    UByte, IOStdReq,
  22.                 DevicePtr,
  23.                 OpenDevice, CloseDevice;
  24. FROM    Dos        IMPORT    Delay;
  25. FROM    KeyMap        IMPORT    KeyMapPtr;
  26. FROM    Console        IMPORT    consoleName,
  27.                 RawKeyConvert;
  28. FROM    InputEvent    IMPORT    InputEvent, Class, QualifierSet;
  29. FROM    Graphics    IMPORT    DrawModeSet, FontStyleSet, FontFlagSet,
  30.                 ViewModes,ViewModeSet,
  31.                 TextAttrPtr, BitMapPtr,
  32.                 TextAttr, BitMap,
  33.                 InitBitMap;
  34. FROM    Intuition    IMPORT    maxBody, menuEnabled,
  35.                 ScreenFlagSet, WindowFlagSet, IDCMPFlagSet,
  36.                 ActivationFlagSet, PropInfoFlagSet,
  37.                 MenuItemFlags, MenuItemFlagSet,
  38.                 GadgetFlagSet, gadgDisabled, selected,
  39.                 GadgetPtr, ImagePtr, ScreenPtr, BorderPtr,
  40.                 IntuiTextPtr, MenuPtr, MenuItemPtr,
  41.                 WindowPtr, IntuitionBasePtr,
  42.                 NewScreen, NewWindow, Border, IntuiText,
  43.                 Menu, MenuItem, Gadget, PropInfo, StringInfo,
  44.                 IntuiMessage,
  45.                 RefreshGList, RemoveGadget, AddGadget,
  46.                 RemoveGList;
  47. FROM    Heap        IMPORT    Allocate, AllocMem, Deallocate;
  48.  
  49.  
  50. CONST    IntuitionWait    = 1;
  51.     Tieftaucher    ="Depth <= 0 ?";
  52.     keinSpeicher    ="nicht genug Speicher frei!";
  53.     widthFehler    ="Breite muß Vielfaches von 16 sein!";
  54.     ConsoleFehler    ="kann Console Device nicht öffnen!";
  55.  
  56.  
  57. VAR    ConsoleDevice    :DevicePtr;
  58.     ConsoleRequest    :IOStdReq;
  59.  
  60.  
  61. PROCEDURE initNewScreen    (VAR newScreen            :NewScreen;
  62.                  X,Y, Width,Height,
  63.                              Depth            :INTEGER;
  64.                          DetailPen, BlockPen    :UByte;
  65.                           Mode            :GraphMode;
  66.                          Type            :ScreenFlagSet;
  67.                           Font            :TextAttrPtr;
  68.                           DefaultTitle        :ADDRESS);
  69.  
  70. BEGIN
  71. WITH newScreen DO
  72.   leftEdge    := X;
  73.   topEdge    := Y;
  74.   width        := Width;
  75.   height    := Height;
  76.   depth        := Depth;
  77.   detailPen    := DetailPen;
  78.   blockPen    := BlockPen;
  79.   CASE Mode OF
  80.     LoRes    :viewModes := ViewModeSet {}
  81.   | LoResLace    :viewModes := ViewModeSet {lace}
  82.   | HiRes    :viewModes := ViewModeSet {hires}
  83.   | HiResLace    :viewModes := ViewModeSet {hires,lace}
  84.   | LoResHAM    :viewModes := ViewModeSet {ham}
  85.   | LoResEx    :viewModes := ViewModeSet {extraHalfbrite}
  86.     END;
  87.   type        := Type;
  88.   font        := Font;
  89.   defaultTitle    := DefaultTitle;
  90.   gadgets    := NIL;
  91.   customBitMap    := NIL
  92.   END
  93. END initNewScreen;
  94.  
  95.  
  96. PROCEDURE initNewWindow    (VAR newWindow            :NewWindow;
  97.                  X,Y, Width,Height        :INTEGER;
  98.                              DetailPen, BlockPen    :UByte;
  99.                              IDCMPFlags            :IDCMPFlagSet;
  100.                              Flags            :WindowFlagSet;
  101.                              FirstGadget        :GadgetPtr;
  102.                              CheckMark            :ImagePtr;
  103.                              Title            :ADDRESS;
  104.                              Screen            :ScreenPtr;
  105.                              BitMap            :BitMapPtr;
  106.                              MinWidth,MinHeight,
  107.                              MaxWidth,MaxHeight        :INTEGER;
  108.                              Type            :ScreenFlagSet);
  109.  
  110. BEGIN
  111. WITH newWindow DO
  112.   leftEdge    := X;
  113.   topEdge    := Y;
  114.   width        := Width;
  115.   height    := Height;
  116.   detailPen    := DetailPen;
  117.   blockPen    := BlockPen;
  118.   idcmpFlags    := IDCMPFlags;
  119.   flags        := Flags;
  120.   firstGadget    := FirstGadget;
  121.   checkMark    := CheckMark;
  122.   title        := Title;
  123.   screen    := Screen;
  124.   bitMap    := BitMap;
  125.   minWidth    := MinWidth;
  126.   minHeight    := MinHeight;
  127.   maxWidth    := MaxWidth;
  128.   maxHeight    := MaxHeight;
  129.   type        := Type
  130.   END
  131. END initNewWindow;
  132.  
  133.  
  134. PROCEDURE openBitMap        (    Width, Height,
  135.                      Depth        :INTEGER) :BitMapPtr;
  136.  
  137. VAR    Fehler        :BOOLEAN;
  138.     bitMap        :BitMapPtr;
  139.     i        :CARDINAL;
  140.     RasterSize    :LONGINT;
  141.  
  142. BEGIN
  143. Assert (Depth >= 0, ADR (Tieftaucher));
  144. Assert (Width MOD 16 = 0, ADR (widthFehler));
  145. Allocate (bitMap, SIZE (BitMap));
  146. Assert (bitMap # NIL, ADR (keinSpeicher));
  147. InitBitMap (bitMap^, Depth, Width, Height);
  148. WITH bitMap^ DO
  149.   RasterSize := LONGINT (bytesPerRow) * LONGINT (rows);
  150.   Fehler := FALSE;
  151.   FOR i := 0 TO Depth-1 DO
  152.     AllocMem (planes[i], RasterSize, TRUE);
  153.     Fehler := (planes[i] = NIL) OR Fehler
  154.     END;
  155.   IF Fehler THEN
  156.     FOR i := 0 TO Depth-1 DO
  157.       IF planes[i] # NIL THEN
  158.         Deallocate (planes[i])
  159.         END
  160.       END;
  161.     Deallocate (bitMap);
  162.     bitMap := NIL
  163.     END
  164.   END;
  165. RETURN bitMap
  166. END openBitMap;
  167.  
  168.  
  169. PROCEDURE initBorder    (VAR border            :Border;
  170.                  X,Y            :INTEGER;
  171.                              Front,Back            :UByte;
  172.                              Drawmodes            :DrawModeSet;
  173.                              Count            :UByte;
  174.                              XY                :ADDRESS;
  175.                              NextBorder            :BorderPtr);
  176.  
  177. BEGIN
  178. WITH border DO
  179.   leftEdge    := X;
  180.   topEdge    := Y;
  181.   frontPen    := Front;
  182.   backPen    := Back;
  183.   drawMode    := Drawmodes;
  184.   count        := Count;
  185.   xy        := XY;
  186.   nextBorder    := NextBorder
  187.   END
  188. END initBorder;
  189.  
  190.  
  191. PROCEDURE makeBorder    (VAR borderXY            :ARRAY OF INTEGER;
  192.                  Width,Height        :INTEGER);
  193.  
  194. BEGIN
  195. IF HIGH (borderXY) < 9 THEN
  196.   RETURN
  197.   END;
  198. borderXY[0] := 0;        borderXY[1] := 0;
  199. borderXY[2] := Width-1;        borderXY[3] := 0;
  200. borderXY[4] := Width-1;        borderXY[5] := Height-1;
  201. borderXY[6] := 0;        borderXY[7] := Height-1;
  202. borderXY[8] := 0;        borderXY[9] := 0
  203. END makeBorder;
  204.  
  205.  
  206. PROCEDURE initIntuiText (VAR text            :IntuiText;
  207.                  Front,Back            :UByte;
  208.                              Drawmodes            :DrawModeSet;
  209.                              X,Y            :INTEGER;
  210.                              Font            :TextAttrPtr;
  211.                              IText            :ADDRESS;
  212.                              NextText            :IntuiTextPtr);
  213.  
  214. BEGIN
  215. WITH text DO
  216.   frontPen    := Front;
  217.   backPen    := Back;
  218.   drawMode    := Drawmodes;
  219.   leftEdge    := X;
  220.   topEdge    := Y;
  221.   iTextFont    := Font;
  222.   iText        := IText;
  223.   nextText    := NextText
  224.   END
  225. END initIntuiText;
  226.  
  227.  
  228. PROCEDURE initTextAttr    (VAR textAttr            :TextAttr;
  229.                  Name            :ADDRESS;
  230.                              YSize            :CARDINAL;
  231.                              Style            :FontStyleSet;
  232.                              Flags            :FontFlagSet);
  233.  
  234. BEGIN
  235. WITH textAttr DO
  236.   name        := Name;
  237.   ySize        := YSize;
  238.   style        := Style;
  239.   flags        := Flags
  240.   END
  241. END initTextAttr;
  242.  
  243.  
  244. PROCEDURE initMenu    (VAR menu            :Menu;
  245.                  NextMenu            :MenuPtr;
  246.                              X,Y, Width,Height        :INTEGER;
  247.                              Flags            :BITSET;
  248.                              Name            :ADDRESS;
  249.                              FirstItem            :MenuItemPtr);
  250.  
  251. BEGIN
  252. WITH menu DO
  253.   nextMenu    := NextMenu;
  254.   leftEdge    := X;
  255.   topEdge    := Y;
  256.   width        := Width;
  257.   height    := Height;
  258.   flags        := Flags;
  259.   menuName    := Name;
  260.   firstItem    := FirstItem
  261.   END
  262. END initMenu;
  263.  
  264.  
  265. PROCEDURE initMenuItem    (VAR menuItem            :MenuItem;
  266.                  NextItem            :MenuItemPtr;
  267.                              X,Y, Width,Height        :INTEGER;
  268.                              Flags            :MenuItemFlagSet;
  269.                              MutualExclude        :LONGSET;
  270.                              ItemFill,
  271.                              SelectFill            :ADDRESS;
  272.                              Command            :CHAR;
  273.                              SubItem            :MenuItemPtr;
  274.                              NextSelect            :CARDINAL);
  275.  
  276. BEGIN
  277. WITH menuItem DO
  278.   nextItem    := NextItem;
  279.   leftEdge    := X;
  280.   topEdge    := Y;
  281.   width        := Width;
  282.   height    := Height;
  283.   flags        := Flags;
  284.   mutualExclude    := MutualExclude;
  285.   itemFill    := ItemFill;
  286.   selectFill    := SelectFill;
  287.   command    := Command;
  288.   subItem    := SubItem;
  289.   nextSelect    := NextSelect
  290.   END
  291. END initMenuItem;
  292.  
  293.  
  294. PROCEDURE initGadget    (VAR gadget            :Gadget;
  295.                  NextGadget            :GadgetPtr;
  296.                              X,Y, Width,Height        :INTEGER;
  297.                              Flags            :GadgetFlagSet;
  298.                              Activation            :ActivationFlagSet;
  299.                              GadgetType            :CARDINAL;
  300.                              GadgetRender,
  301.                              SelectRender        :ADDRESS;
  302.                              GadgetText            :IntuiTextPtr;
  303.                              MutualExclude        :LONGSET;
  304.                              SpecialInfo        :ADDRESS;
  305.                              GadgetID            :INTEGER;
  306.                              UserData            :ADDRESS);
  307.  
  308. BEGIN
  309. WITH gadget DO
  310.   nextGadget    := NextGadget;
  311.   leftEdge    := X;
  312.   topEdge    := Y;
  313.   width        := Width;
  314.   height    := Height;
  315.   flags        := Flags;
  316.   activation    := Activation;
  317.   gadgetType    := GadgetType;
  318.   gadgetRender    := GadgetRender;
  319.   selectRender    := SelectRender;
  320.   gadgetText    := GadgetText;
  321.   mutualExclude    := MutualExclude;
  322.   specialInfo    := SpecialInfo;
  323.   gadgetID    := GadgetID;
  324.   userData    := UserData
  325.   END
  326. END initGadget;
  327.  
  328.  
  329. PROCEDURE initPropInfo    (VAR propInfo            :PropInfo;
  330.                  Flags            :PropInfoFlagSet;
  331.                              VertPot, HorizPot,
  332.                              VertCount, HorizCount    :CARDINAL);
  333.  
  334. BEGIN
  335. WITH propInfo DO
  336.   flags        := Flags;
  337.   vertPot    := VertPot;
  338.   horizPot    := HorizPot;
  339.   IF VertCount = 0 THEN vertBody    := maxBody
  340.              ELSE vertBody    := maxBody DIV VertCount
  341.     END;
  342.   IF HorizCount = 0 THEN horizBody    := maxBody
  343.              ELSE horizBody    := maxBody DIV HorizCount
  344.     END
  345.   END
  346. END initPropInfo;
  347.  
  348.  
  349. PROCEDURE initStringInfo (VAR stringInfo        :StringInfo;
  350.                   Buffer, UndoBuffer    :ADDRESS;
  351.                               BufferPos, MaxChars,
  352.                               DispPos            :INTEGER;
  353.                               AltKeyMap            :KeyMapPtr);
  354.  
  355.  
  356. BEGIN
  357. WITH stringInfo DO
  358.   buffer    := Buffer;
  359.   undoBuffer    := UndoBuffer;
  360.   bufferPos    := BufferPos;
  361.   maxChars    := MaxChars;
  362.   dispPos    := DispPos;
  363.   altKeyMap    := AltKeyMap
  364.   END
  365. END initStringInfo;
  366.  
  367.  
  368. PROCEDURE refreshOneGadget ( Window            :WindowPtr;
  369.                  Gadget            :GadgetPtr);
  370.  
  371. VAR    Position    :INTEGER;
  372.  
  373. BEGIN
  374. Position := RemoveGadget (Window, Gadget);
  375. Position := AddGadget (Window, Gadget, -1);
  376. RefreshGList (Gadget, Window, NIL, 1);
  377. (* Delay (IntuitionWait) *)
  378. END refreshOneGadget;
  379.  
  380.  
  381. PROCEDURE refreshAllGadgets (Window            :WindowPtr);
  382.  
  383. VAR    First, List    :GadgetPtr;
  384.     Position    :INTEGER;
  385.  
  386. BEGIN
  387. List := Window^.firstGadget;
  388. Position := RemoveGList (Window, List, -1);
  389. WHILE List # NIL DO
  390.   First := List;
  391.   List := First^.nextGadget;
  392.   Position := AddGadget (Window, First, -1);
  393.   RefreshGList (First, Window, NIL, 1)
  394.   END;
  395. (* Delay (IntuitionWait) *)
  396. END refreshAllGadgets;
  397.  
  398.  
  399. PROCEDURE refreshSomeGadgets ( Window            :WindowPtr;
  400.                    Gadgets            :LONGSET);
  401.  
  402. VAR    First, List    :GadgetPtr;
  403.     Position    :INTEGER;
  404.  
  405. BEGIN
  406. List := Window^.firstGadget;
  407. Position := RemoveGList (Window, List, -1);
  408. WHILE List # NIL DO
  409.   First := List;
  410.   List := First^.nextGadget;
  411.   Position := AddGadget (Window, First, -1);
  412.   IF (First^.gadgetID <= 31) AND (First^.gadgetID IN Gadgets) THEN
  413.     RefreshGList (First, Window, NIL, 1)
  414.     END
  415.   END;
  416. (* Delay (IntuitionWait) *)
  417. END refreshSomeGadgets;
  418.  
  419.  
  420. PROCEDURE enableGadget  (    Window            :WindowPtr;
  421.                  Gadget            :GadgetPtr);
  422.  
  423. VAR    Position    :INTEGER;
  424.  
  425. BEGIN
  426. IF gadgDisabled IN Gadget^.flags THEN
  427.   Position := RemoveGadget (Window, Gadget);
  428.   EXCL (Gadget^.flags, gadgDisabled);
  429.   Position := AddGadget (Window, Gadget, -1);
  430.   RefreshGList (Gadget, Window, NIL, 1);
  431. (*   Delay (IntuitionWait)*)
  432.   END
  433. END enableGadget;
  434.  
  435.  
  436. PROCEDURE enableGadgets    (    Window            :WindowPtr;
  437.                  Gadgets            :LONGSET);
  438.  
  439. VAR    First, List    :GadgetPtr;
  440.     Position    :INTEGER;
  441.  
  442. BEGIN
  443. List := Window^.firstGadget;
  444. Position := RemoveGList (Window, List, -1);
  445. WHILE List # NIL DO
  446.   First := List;
  447.   List := First^.nextGadget;
  448.   WITH First^ DO
  449.     IF (gadgDisabled IN flags) AND
  450.        ((gadgetID <= 31) AND (gadgetID IN Gadgets)) THEN
  451.       EXCL (flags, gadgDisabled);
  452.       Position := AddGadget (Window, First, -1);
  453.       RefreshGList (First, Window, NIL, 1)
  454.     ELSE
  455.       Position := AddGadget (Window, First, -1)
  456.       END
  457.     END
  458.   END;
  459. (* Delay (IntuitionWait)*)
  460. END enableGadgets;
  461.  
  462.  
  463. PROCEDURE disableGadget (    Window            :WindowPtr;
  464.                  Gadget            :GadgetPtr);
  465.  
  466. VAR    Position    :INTEGER;
  467.  
  468. BEGIN
  469. IF NOT (gadgDisabled IN Gadget^.flags) THEN
  470.   Position := RemoveGadget (Window, Gadget);
  471.   INCL (Gadget^.flags, gadgDisabled);
  472.   Position := AddGadget (Window, Gadget, -1);
  473.   RefreshGList (Gadget, Window, NIL, 1);
  474. (*  Delay (IntuitionWait)*)
  475.   END
  476. END disableGadget;
  477.  
  478.  
  479. PROCEDURE disableGadgets(    Window            :WindowPtr;
  480.                  Gadgets            :LONGSET);
  481.  
  482. VAR    First, List    :GadgetPtr;
  483.     Position    :INTEGER;
  484.  
  485. BEGIN
  486. List := Window^.firstGadget;
  487. Position := RemoveGList (Window, List, -1);
  488. WHILE List # NIL DO
  489.   First := List;
  490.   List := First^.nextGadget;
  491.   WITH First^ DO
  492.     IF NOT (gadgDisabled IN flags) AND
  493.        ((gadgetID <= 31) AND (gadgetID IN Gadgets)) THEN
  494.       INCL (flags, gadgDisabled);
  495.       Position := AddGadget (Window, First, -1);
  496.       RefreshGList (First, Window, NIL, 1)
  497.     ELSE
  498.       Position := AddGadget (Window, First, -1)
  499.       END
  500.     END
  501.   END;
  502. (*Delay (IntuitionWait)*)
  503. END disableGadgets;
  504.  
  505.  
  506. PROCEDURE selectGadget  (    Window            :WindowPtr;
  507.                  Gadget            :GadgetPtr);
  508.  
  509. VAR    Position    :INTEGER;
  510.  
  511. BEGIN
  512. IF NOT (selected IN Gadget^.flags) THEN
  513.   Position := RemoveGadget (Window, Gadget);
  514.   INCL (Gadget^.flags, selected);
  515.   Position := AddGadget (Window, Gadget, -1);
  516.   RefreshGList (Gadget, Window, NIL, 1);
  517. (*  Delay (IntuitionWait)*)
  518.   END
  519. END selectGadget;
  520.  
  521.  
  522. PROCEDURE selectGadgets (    Window            :WindowPtr;
  523.                  Gadgets            :LONGSET);
  524.  
  525. VAR    First, List    :GadgetPtr;
  526.     Position    :INTEGER;
  527.  
  528. BEGIN
  529. List := Window^.firstGadget;
  530. Position := RemoveGList (Window, List, -1);
  531. WHILE List # NIL DO
  532.   First := List;
  533.   List := First^.nextGadget;
  534.   WITH First^ DO
  535.     IF NOT (selected IN flags) AND
  536.        ((gadgetID <= 31) AND (gadgetID IN Gadgets)) THEN
  537.       INCL (flags, selected);
  538.       Position := AddGadget (Window, First, -1);
  539.       RefreshGList (First, Window, NIL, 1)
  540.     ELSE
  541.       Position := AddGadget (Window, First, -1);
  542.       END
  543.     END
  544.   END;
  545. (*Delay (IntuitionWait)*)
  546. END selectGadgets;
  547.  
  548.  
  549. PROCEDURE deselectGadget (   Window            :WindowPtr;
  550.                  Gadget            :GadgetPtr);
  551.  
  552. VAR    Position    :INTEGER;
  553.  
  554. BEGIN
  555. IF selected IN Gadget^.flags THEN
  556.   Position := RemoveGadget (Window, Gadget);
  557.   EXCL (Gadget^.flags, selected);
  558.   Position := AddGadget (Window, Gadget, -1);
  559.   RefreshGList (Gadget, Window, NIL, 1);
  560. (*  Delay (IntuitionWait)*)
  561.   END
  562. END deselectGadget;
  563.  
  564.  
  565. PROCEDURE deselectGadgets (  Window            :WindowPtr;
  566.                  Gadgets            :LONGSET);
  567.  
  568. VAR    First, List    :GadgetPtr;
  569.     Position    :INTEGER;
  570.  
  571. BEGIN
  572. List := Window^.firstGadget;
  573. Position := RemoveGList (Window, List, -1);
  574. WHILE List # NIL DO
  575.   First := List;
  576.   List := First^.nextGadget;
  577.   WITH First^ DO
  578.     IF (selected IN flags) AND
  579.        ((gadgetID <= 31) AND (gadgetID IN Gadgets)) THEN
  580.       EXCL (flags, selected);
  581.       Position := AddGadget (Window, First, -1);
  582.       RefreshGList (First, Window, NIL, 1)
  583.     ELSE
  584.       Position := AddGadget (Window, First, -1);
  585.       END
  586.     END
  587.   END;
  588. (*Delay (IntuitionWait)*)
  589. END deselectGadgets;
  590.  
  591.  
  592. PROCEDURE enableMenus    (    Window            :WindowPtr;
  593.                  Menus            :LONGSET);
  594.  
  595. VAR    menu    :MenuPtr;
  596.     i    :CARDINAL;
  597.  
  598. BEGIN
  599. menu := Window^.menuStrip; i := 0;
  600. WHILE menu # NIL DO
  601.   WITH menu^ DO
  602.     IF (i IN Menus) AND NOT (menuEnabled IN flags) THEN
  603.       INCL (flags, menuEnabled)
  604.       END;
  605.     menu := menu^.nextMenu; INC (i)
  606.     END
  607.   END
  608. END enableMenus;
  609.  
  610.  
  611. PROCEDURE disableMenus    (    Window            :WindowPtr;
  612.                  Menus            :LONGSET);
  613.  
  614. VAR    menu    :MenuPtr;
  615.     i    :CARDINAL;
  616.  
  617. BEGIN
  618. menu := Window^.menuStrip; i := 0;
  619. WHILE menu # NIL DO
  620.   WITH menu^ DO
  621.     IF (i IN Menus) AND (menuEnabled IN flags) THEN
  622.       EXCL (flags, menuEnabled)
  623.       END;
  624.     menu := nextMenu; INC (i)
  625.     END
  626.   END
  627. END disableMenus;
  628.  
  629.  
  630. PROCEDURE enableItems    (    Window            :WindowPtr;
  631.                  Menu            :CARDINAL;
  632.                  Items            :LONGSET);
  633.  
  634. VAR    menu    :MenuPtr;
  635.     item    :MenuItemPtr;
  636.     i    :CARDINAL;
  637.  
  638. BEGIN
  639. menu := Window^.menuStrip; i := 0;
  640. WHILE (menu # NIL) AND (i < Menu) DO
  641.   menu := menu^.nextMenu; INC (i)
  642.   END;
  643. IF menu = NIL THEN
  644.   RETURN
  645.   END;
  646. item := menu^.firstItem; i := 0;
  647. WHILE item # NIL DO
  648.   WITH item^ DO
  649.     IF (i IN Items) AND NOT (itemEnabled IN flags) THEN
  650.       INCL (flags, itemEnabled)
  651.       END;
  652.     item := nextItem; INC (i)
  653.     END
  654.   END
  655. END enableItems;
  656.  
  657.  
  658. PROCEDURE disableItems    (    Window            :WindowPtr;
  659.                  Menu            :CARDINAL;
  660.                  Items            :LONGSET);
  661.  
  662. VAR    menu    :MenuPtr;
  663.     item    :MenuItemPtr;
  664.     i    :CARDINAL;
  665.  
  666. BEGIN
  667. menu := Window^.menuStrip; i := 0;
  668. WHILE (menu # NIL) AND (i < Menu) DO
  669.   menu := menu^.nextMenu; INC (i)
  670.   END;
  671. IF menu = NIL THEN
  672.   RETURN
  673.   END;
  674. item := menu^.firstItem; i := 0;
  675. WHILE item # NIL DO
  676.   WITH item^ DO
  677.     IF (i IN Items) AND (itemEnabled IN flags) THEN
  678.       EXCL (flags, itemEnabled)
  679.       END;
  680.     item := nextItem; INC (i)
  681.     END
  682.   END
  683. END disableItems;
  684.  
  685.  
  686. PROCEDURE MenuNum    (    Code            :CARDINAL) :CARDINAL;
  687.  
  688. BEGIN
  689. RETURN (Code MOD 20H)
  690. END MenuNum;
  691.  
  692.  
  693. PROCEDURE ItemNum    (    Code            :CARDINAL) :CARDINAL;
  694.  
  695. BEGIN
  696. RETURN (Code DIV 20H MOD 40H)
  697. END ItemNum;
  698.  
  699.  
  700.  
  701. PROCEDURE RawToVanilla    (    Nachricht            :IntuiMessage;
  702.              VAR VanillaString        :ARRAY OF CHAR);
  703.  
  704. VAR    actual        :LONGINT;
  705.     Event        :InputEvent;
  706.  
  707. BEGIN
  708. WITH Event DO
  709.   nextEvent    := NIL;
  710.   class        := rawkey;
  711.   code        := Nachricht.code;
  712.   qualifier    := Nachricht.qualifier;
  713.   eventAddress    := Nachricht.iAddress
  714.   END;
  715. actual := RawKeyConvert (ConsoleDevice,
  716.              ADR (Event),
  717.              ADR (VanillaString),
  718.              HIGH (VanillaString),
  719.              NIL);
  720. IF (actual < 0) OR (actual > HIGH (VanillaString)) THEN
  721.   VanillaString[0] := 0C
  722. ELSE
  723.   VanillaString[actual] := 0C
  724.   END
  725. END RawToVanilla;
  726.  
  727.  
  728. PROCEDURE CloseTools;
  729.  
  730. BEGIN
  731. IF ConsoleDevice # NIL THEN
  732.   CloseDevice (ADR (ConsoleRequest))
  733.   END
  734. END CloseTools;
  735.  
  736.  
  737. (* IntuitionTools *)
  738. BEGIN
  739. ConsoleDevice := NIL;
  740. TermProcedure (CloseTools);
  741.  
  742. OpenDevice (ADR (consoleName), -1, ADR (ConsoleRequest), LONGSET {});
  743. Assert (ConsoleRequest.error = 0, ADR (ConsoleFehler));
  744. ConsoleDevice := ConsoleRequest.device
  745. END IntuitionTools.
  746.